﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Crosland.Automotriz.Logic.Linq;
using System.Configuration;
using Microsoft.Reporting.WebForms;
using System.Security.Principal;
using System.Net;
using Crosland.Automotriz.Facade.Facade;
using Crosland.Automotriz.Facade.Interface;
using Crosland.Automotriz.Core;
using Crosland.Automotriz.Logic.ControlExeption;
using System.Drawing;
namespace Crosland.Automotriz.Web.Repuestos
{
    public partial class wFrmSituacionArticuloKawasakiExtranet : System.Web.UI.Page
    {
        private const string WatermarkText = "ImgGaleriaSlider";
        
        private Font WatermarkFont { get { return new Font("Arial", 10); } }
       
        private Brush WatermarkBrush { get { return new SolidBrush(Color.FromArgb(150, Color.White)); } }
       
        private string idNegocio = ConfigurationManager.AppSettings["Negocio"];
        
        private iFacadeRelacionarArticuloActualizar BL_RelacionarArticulo = null;
        
        private clsImagenSliderLogic imagenSliderLogic = null;
        
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ScriptManager.RegisterStartupScript(this, typeof(Page), "carga", "JavaScript:confirmSubmitResult();", true);

            }
            this.FechaActualizacionStock();
        }
        
        private void GuardarExceptionLog(String msgUsu, Exception ex, String metError)
        {
            try
            {
                String msgReal, fhError, pagError, codUsu;
                msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
                pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
                codUsu = Session["User"].ToString();
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");

                System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
                int number = 0;
                for (int i = 0; i < trace.FrameCount; i++)
                {
                    System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                    number = sf.GetFileLineNumber();
                }
                fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
                new Logg().ErrorLog(Server.MapPath("~/Logs/ErrorLog.csv"), msgUsu, msgReal, pagError, metError, codUsu, number);
            }
            catch (Exception e)
            {
                GuardarExceptionLog(e.Message, e, "GuardarExceptionLog");
                MensajesError(e.Message, e, "GuardarExceptionLog");
            }

        }

        private void MensajesError(String msgUsu, Exception ex, String metError)
        {
            Crosland.Automotriz.Web.UserControl.MensajeError uc = (Crosland.Automotriz.Web.UserControl.MensajeError)Master.FindControl("ucErrorMensaje");
            String msgReal, fhError, pagError, codUsu;
            msgReal = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message;
            pagError = new System.IO.FileInfo(Page.Request.Url.AbsolutePath).Name;
            codUsu = Session["User"].ToString();
            fhError = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
            System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(ex, true);
            int number = 0;
            for (int i = 0; i < trace.FrameCount; i++)
            {
                System.Diagnostics.StackFrame sf = trace.GetFrame(i);
                number = sf.GetFileLineNumber();
            }
            uc.Errores(msgUsu, msgReal, fhError, pagError, metError, codUsu, number);
        }
       
        private void FechaActualizacionStock()
        {
            try
            {
                clsSituacionArticuloLogic l = new clsSituacionArticuloLogic();
                lblStockActualizado.Text = l.RetornaFechaActualizacionStock() == null ? null : Convert.ToDateTime(l.RetornaFechaActualizacionStock()).ToString("dd/MM/yyy hh:mm tt");
            }
            catch (RunException ex)
            {
                GuardarExceptionLog(ex.Message, ex, "FechaActualizacionStock");
                MensajesError(ex.Message, ex, "FechaActualizacionStock");
            }

        }

        private int ObtieneIdMaterial(string strCodifoMaterial)
        {
            clsImportacionesLogic clsImportaciones = new clsImportacionesLogic();
            clsTD_MaterialLogic clsMaterial = new clsTD_MaterialLogic();
            int intIdMaterial = clsImportaciones.RetorIDMaterialKawasaki(strCodifoMaterial);
            List<TD_MATERIAL> ListaMaterial = clsMaterial.listar(intIdMaterial);
            if (ListaMaterial != null && ListaMaterial.Count() > 0)
            {
                txtDescripcion.Text = ListaMaterial[0].DES_MATERIAL.ToString();

            }
            else {
                intIdMaterial = 0;
            }
            return intIdMaterial;
        }

        private void LimpiarBusqueda()
        {
            txtBuscar.Text = string.Empty;
            grdArticulos.DataSource = null;
            grdArticulos.DataBind();
            txtIdMaterial.Text = string.Empty;

        }

        private void ObtieneDatosMuestraReporte()
        {
            int intIndex = grdArticulos.FocusedRowIndex;

            if (intIndex == -1)
            {

                lblMsj.Text = "Seleccione un registro por favor.";
                popupmsj.ShowOnPageLoad = true;
                return;
            }
            txtBuscarCodigo.Text = grdArticulos.GetRowValues(intIndex, "COD_MATERIAL").ToString();
            txtDescripcion.Text = grdArticulos.GetRowValues(intIndex, "DES_MATERIAL").ToString();
            txtIdMaterial.Text = grdArticulos.GetRowValues(intIndex, "ID_MATERIAL").ToString();
            PopupBuscarArticulos.ShowOnPageLoad = false;
            this.MuestraReporte();
            this.LimpiarBusqueda();


        }
        
        private void ListaArticulos()
        {
            try
            {
                BL_RelacionarArticulo = new FacadeRelacionarArticuloActualizar();
                grdArticulos.DataSource = BL_RelacionarArticulo.Buscar_Art_SusTopKawasaki(txtBuscar.Text, Convert.ToInt32(cboopcion.Text));
                grdArticulos.DataBind();
            }
            catch (Exception ex)
            {

                GuardarExceptionLog("Error en la aplicación", ex, "ListaArticulos");
                MensajesError("Error en la aplicación", ex, "ListaArticulos");
            }

        }

        private void MuestraReporte()
        {

            try
            {
                ReportViewerSituacionArticulo.Reset();
                int id_material = txtIdMaterial.Text.Trim() == "" ? ObtieneIdMaterial(txtBuscarCodigo.Text.Trim()) : Convert.ToInt32(txtIdMaterial.Text);
                if (id_material != 0)
                {
                    ReportViewerSituacionArticulo.ServerReport.ReportServerCredentials = new MyReportServerCredentials();
                    ReportViewerSituacionArticulo.ProcessingMode = ProcessingMode.Remote;
                    ReportViewerSituacionArticulo.ServerReport.ReportServerUrl = new Uri(ConfigurationManager.AppSettings["RsServer"]);
                    ReportViewerSituacionArticulo.ServerReport.ReportPath = "/SAP_Repuestos/rsSituacionArticuloSinValorKawasaki";


                    ReportParameter[] parametro = new ReportParameter[1];
                    parametro[0] = new ReportParameter();
                    parametro[0].Name = "id_material_princ";
                    parametro[0].Values.Add(Convert.ToString(id_material));
                    parametro[0].Visible = false;

                    ReportViewerSituacionArticulo.ServerReport.SetParameters(parametro);
                    ReportViewerSituacionArticulo.ServerReport.Refresh();
                    Session["intIdMaterial"] = id_material;



                    if (TabSituacionArticulos.ActiveTabIndex == 1)
                    {
                        if (Session["intIdMaterial"] != null)
                        {
                            this.ListaImagenSlider(Session["intIdMaterial"] == null ? 0 : Convert.ToInt32(Session["intIdMaterial"]));

                        }

                    }

                    return;
                }
                ImgGaleriaSlider.Items.Clear();
                Session["intIdMaterial"] = null;
                ReportViewerSituacionArticulo.Reset();
                ReportViewerSituacionArticulo.ServerReport.Refresh();
                lblMsj.Text = "EL Código ingresado no se encuentra registrado!";
                popupmsj.ShowOnPageLoad = true;

            }
            catch (Exception ex)
            {
                GuardarExceptionLog("Error en la aplicación", ex, "mostrarReport");
                MensajesError("Error en la aplicación", ex, "mostrarReport");
            }
        }
        
        [Serializable]
        public sealed class RSCredentials : IReportServerCredentials
        {
            public WindowsIdentity ImpersonationUser
            {
                get { return null; }
            }

            public ICredentials NetworkCredentials
            {
                get
                {
                    string userName = ConfigurationManager.AppSettings[DatosConfiguracion.RsUser];
                    string password = ConfigurationManager.AppSettings[DatosConfiguracion.RsPassword];
                    string domain = ConfigurationManager.AppSettings[DatosConfiguracion.RsDomain];

                    return new NetworkCredential(userName, password, domain);
                }
            }

            public bool GetFormsCredentials(out Cookie authCookie, out String userName, out String password,
                out String authority)
            {
                authCookie = null;
                userName = null;
                password = null;
                authority = null;
                return false;
            }

        }

        private void ListaImagenSlider(int intId_Material)
        {
            imagenSliderLogic = new clsImagenSliderLogic();

            ImgGaleriaSlider.Items.Clear();

            foreach (var item in imagenSliderLogic.ListaImagenSlider(intId_Material))
            {
                ImgGaleriaSlider.Items.Add(ConfigurationManager.AppSettings["RutaFotoMaterial"] + "/" + item.RUTA_IMAGEN);

            }

        }

        protected void btnSalir_Click(object sender, EventArgs e)
        {
            Session["intIdMaterial"] = null;
            Response.Redirect("~/Seguridad/wFrmDefault.aspx?id=" + idNegocio);
        }

        protected void btnaceptar_Click(object sender, EventArgs e)
        {
            this.ObtieneDatosMuestraReporte();

        }

        protected void btnBuscarPopup_Click(object sender, EventArgs e)
        {
            this.ListaArticulos();
        }

        protected void grdArticulos_AfterPerformCallback(object sender, DevExpress.Web.ASPxGridView.ASPxGridViewAfterPerformCallbackEventArgs e)
        {
            this.ListaArticulos();
        }

        protected void grdArticulos_PageIndexChanged(object sender, EventArgs e)
        {
            this.ListaArticulos();
        }

        protected void btnBuscarCodigo_Click(object sender, EventArgs e)
        {
            this.MuestraReporte();
            this.LimpiarBusqueda();
            TabSituacionArticulos.Visible = true;
        }

        protected void ImgGaleriaSlider_CustomImageProcessing(object source, DevExpress.Web.ASPxImageGallery.ImageGalleryCustomImageProcessingEventArgs e)
        {
            e.Graphics.RotateTransform(-90);
            float textHeight = e.Graphics.MeasureString(WatermarkText, WatermarkFont).Height;
            e.Graphics.DrawString(WatermarkText, WatermarkFont, WatermarkBrush, -e.Image.Height, e.Image.Width - textHeight);
        }

        protected void TabSituacionArticulos_TabClick(object source, DevExpress.Web.ASPxTabControl.TabControlCancelEventArgs e)
        {

            if (TabSituacionArticulos.ActiveTabIndex == 0)
            {
                if (Session["intIdMaterial"] != null)
                {
                    this.ListaImagenSlider(Session["intIdMaterial"] == null ? 0 : Convert.ToInt32(Session["intIdMaterial"]));

                }

            }
        }
    
    }
}